<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //局部作用域 （函数作用域） 访问规则
      //局部作用域 会优先访问自身作用域的变量   如果没有 则会向上查找变量 如果上层也都没有 那么就是not define 报错

      // //   var a = 10
      //   function fn() {
      //     // var a =20;
      //     //局部作用域
      //     console.log(a)
      //   }
      //   fn()
      //多层局部作用域
      //   var a = 10
      //   function fn1() {
      //     // var a = 20
      //     fn2()
      //     function fn2() { //会把fn2成为fn1的子函数
      //     //   var a = 30
      //       fn3()
      //       function fn3() {
      //         // var a = 40
      //         console.log(a)
      //       }
      //     }
      //   }
      //   fn1()
      //查找变量的位置  查找定义的时候的a变量
      //作用域 向上查找 不是查找调用时候的作用域变量  是查找定义函数时候的作用域变量
      var a = 10
      function fn() {
        console.log(a)
      }

      function myFn(fn) {
        //调用的时候也有a变量
        var a = 20
        fn()
      }
      myFn()
      /* 
      总结 1、作用域查找变量规则    逐层向上查找变量  就近原则  直到找到全局变量
      2、查找的变量是定义函数外的变量  不是调用时的函数外部的变量
      */

    </script>
  </body>
</html>
